<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/pm.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/pm.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="k">/*</span>
<a name="2" /><span class="True">       2:</span> <span class="k"> *  pm.h - Power management interface</span>
<a name="3" /><span class="True">       3:</span> <span class="k"> *</span>
<a name="4" /><span class="True">       4:</span> <span class="k"> *  Copyright (C) 2000 Andrew Henroid</span>
<a name="5" /><span class="True">       5:</span> <span class="k"> *</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> *  This program is free software; you can redistribute it and/or modify</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> *  it under the terms of the GNU General Public License as published by</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> *  the Free Software Foundation; either version 2 of the License, or</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> *  (at your option) any later version.</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> *</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> *  This program is distributed in the hope that it will be useful,</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> *  but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="14" /><span class="True">      14:</span> <span class="k"> *  GNU General Public License for more details.</span>
<a name="15" /><span class="True">      15:</span> <span class="k"> *</span>
<a name="16" /><span class="True">      16:</span> <span class="k"> *  You should have received a copy of the GNU General Public License</span>
<a name="17" /><span class="True">      17:</span> <span class="k"> *  along with this program; if not, write to the Free Software</span>
<a name="18" /><span class="True">      18:</span> <span class="k"> *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
<a name="19" /><span class="True">      19:</span> <span class="k"> */</span>
<a name="20" /><span class="True">      20:</span> 
<a name="21" /><span class="Maybe">      21:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX1BNX0hfMA__"><span class="b">_LINUX_PM_H</span></a>
<a name="22" /><span class="Maybe">      22:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX1BNX0hfMA__"><span class="b">_LINUX_PM_H</span></a>
<a name="23" /><span class="Maybe">      23:</span> 
<a name="24" /><span class="Maybe">      24:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">list</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="25" /><span class="Maybe">      25:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">workqueue</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="26" /><span class="Maybe">      26:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">spinlock</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="27" /><span class="Maybe">      27:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">wait</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="28" /><span class="Maybe">      28:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">timer</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="29" /><span class="Maybe">      29:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">completion</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="30" /><span class="Maybe">      30:</span> 
<a name="31" /><span class="Maybe">      31:</span> <span class="k">/*</span>
<a name="32" /><span class="Maybe">      32:</span> <span class="k"> * Callbacks for platform drivers to implement.</span>
<a name="33" /><span class="Maybe">      33:</span> <span class="k"> */</span>
<a name="34" /><span class="Maybe">      34:</span> <span class="m">extern</span> <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">pm_power_off</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="35" /><span class="Maybe">      35:</span> <span class="m">extern</span> <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">pm_power_off_prepare</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="36" /><span class="Maybe">      36:</span> 
<a name="37" /><span class="Maybe">      37:</span> <span class="m">struct</span> <span class="b">device</span><span class="f">;</span> <span class="k">/* we have a circular dep with device.h */</span>
<a name="38" /><span class="Maybe">      38:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1ZUX0NPTlNPTEVfU0xFRVBfMA__"><span class="b">CONFIG_VT_CONSOLE_SLEEP</span></a>
<a name="39" /><span class="Maybe">      39:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">pm_vt_switch_required</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">,</span> <span class="m">bool</span> <span class="b">required</span><span class="f">)</span><span class="f">;</span>
<a name="40" /><span class="Maybe">      40:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">pm_vt_switch_unregister</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="41" /><span class="False">      41:</span> <span class="f">#</span><span class="n">else</span>
<a name="42" /><span class="False">      42:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">pm_vt_switch_required</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">,</span> <span class="m">bool</span> <span class="b">required</span><span class="f">)</span>
<a name="43" /><span class="False">      43:</span> <span class="f">{</span>
<a name="44" /><span class="False">      44:</span> <span class="f">}</span>
<a name="45" /><span class="False">      45:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">pm_vt_switch_unregister</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span>
<a name="46" /><span class="False">      46:</span> <span class="f">{</span>
<a name="47" /><span class="False">      47:</span> <span class="f">}</span>
<a name="48" /><span class="Maybe">      48:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_VT_CONSOLE_SLEEP */</span>
<a name="49" /><span class="Maybe">      49:</span> 
<a name="50" /><span class="Maybe">      50:</span> <span class="k">/*</span>
<a name="51" /><span class="Maybe">      51:</span> <span class="k"> * Device power management</span>
<a name="52" /><span class="Maybe">      52:</span> <span class="k"> */</span>
<a name="53" /><span class="Maybe">      53:</span> 
<a name="54" /><span class="Maybe">      54:</span> <span class="m">struct</span> <span class="b">device</span><span class="f">;</span>
<a name="55" /><span class="Maybe">      55:</span> 
<a name="56" /><span class="Maybe">      56:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1BNXzA_"><span class="b">CONFIG_PM</span></a>
<a name="57" /><span class="Maybe">      57:</span> <span class="m">extern</span> <span class="m">const</span> <span class="m">char</span> <span class="b">power_group_name</span><span class="f">[</span><span class="f">]</span><span class="f">;</span>        <span class="k">/* = &quot;power&quot; */</span>
<a name="58" /><span class="False">      58:</span> <span class="f">#</span><span class="n">else</span>
<a name="59" /><span class="False">      59:</span> <span class="f">#</span><span class="n">define</span> <span class="b">power_group_name</span>    <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="60" /><span class="Maybe">      60:</span> <span class="f">#</span><span class="n">endif</span>
<a name="61" /><span class="Maybe">      61:</span> 
<a name="62" /><span class="Maybe">      62:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">pm_message</span> <span class="f">{</span>
<a name="63" /><span class="Maybe">      63:</span>     <span class="m">int</span> <span class="b">event</span><span class="f">;</span>
<a name="64" /><span class="Maybe">      64:</span> <span class="f">}</span> <span class="b">pm_message_t</span><span class="f">;</span>
<a name="65" /><span class="Maybe">      65:</span> 
<a name="66" /><span class="Maybe">      66:</span> <span class="k">/**</span>
<a name="67" /><span class="Maybe">      67:</span> <span class="k"> * struct dev_pm_ops - device PM callbacks</span>
<a name="68" /><span class="Maybe">      68:</span> <span class="k"> *</span>
<a name="69" /><span class="Maybe">      69:</span> <span class="k"> * Several device power state transitions are externally visible, affecting</span>
<a name="70" /><span class="Maybe">      70:</span> <span class="k"> * the state of pending I/O queues and (for drivers that touch hardware)</span>
<a name="71" /><span class="Maybe">      71:</span> <span class="k"> * interrupts, wakeups, DMA, and other hardware state.  There may also be</span>
<a name="72" /><span class="Maybe">      72:</span> <span class="k"> * internal transitions to various low-power modes which are transparent</span>
<a name="73" /><span class="Maybe">      73:</span> <span class="k"> * to the rest of the driver stack (such as a driver that&apos;s ON gating off</span>
<a name="74" /><span class="Maybe">      74:</span> <span class="k"> * clocks which are not in active use).</span>
<a name="75" /><span class="Maybe">      75:</span> <span class="k"> *</span>
<a name="76" /><span class="Maybe">      76:</span> <span class="k"> * The externally visible transitions are handled with the help of callbacks</span>
<a name="77" /><span class="Maybe">      77:</span> <span class="k"> * included in this structure in such a way that two levels of callbacks are</span>
<a name="78" /><span class="Maybe">      78:</span> <span class="k"> * involved.  First, the PM core executes callbacks provided by PM domains,</span>
<a name="79" /><span class="Maybe">      79:</span> <span class="k"> * device types, classes and bus types.  They are the subsystem-level callbacks</span>
<a name="80" /><span class="Maybe">      80:</span> <span class="k"> * supposed to execute callbacks provided by device drivers, although they may</span>
<a name="81" /><span class="Maybe">      81:</span> <span class="k"> * choose not to do that.  If the driver callbacks are executed, they have to</span>
<a name="82" /><span class="Maybe">      82:</span> <span class="k"> * collaborate with the subsystem-level callbacks to achieve the goals</span>
<a name="83" /><span class="Maybe">      83:</span> <span class="k"> * appropriate for the given system transition, given transition phase and the</span>
<a name="84" /><span class="Maybe">      84:</span> <span class="k"> * subsystem the device belongs to.</span>
<a name="85" /><span class="Maybe">      85:</span> <span class="k"> *</span>
<a name="86" /><span class="Maybe">      86:</span> <span class="k"> * @prepare: The principal role of this callback is to prevent new children of</span>
<a name="87" /><span class="Maybe">      87:</span> <span class="k"> *    the device from being registered after it has returned (the driver&apos;s</span>
<a name="88" /><span class="Maybe">      88:</span> <span class="k"> *    subsystem and generally the rest of the kernel is supposed to prevent</span>
<a name="89" /><span class="Maybe">      89:</span> <span class="k"> *    new calls to the probe method from being made too once @prepare() has</span>
<a name="90" /><span class="Maybe">      90:</span> <span class="k"> *    succeeded).  If @prepare() detects a situation it cannot handle (e.g.</span>
<a name="91" /><span class="Maybe">      91:</span> <span class="k"> *    registration of a child already in progress), it may return -EAGAIN, so</span>
<a name="92" /><span class="Maybe">      92:</span> <span class="k"> *    that the PM core can execute it once again (e.g. after a new child has</span>
<a name="93" /><span class="Maybe">      93:</span> <span class="k"> *    been registered) to recover from the race condition.</span>
<a name="94" /><span class="Maybe">      94:</span> <span class="k"> *    This method is executed for all kinds of suspend transitions and is</span>
<a name="95" /><span class="Maybe">      95:</span> <span class="k"> *    followed by one of the suspend callbacks: @suspend(), @freeze(), or</span>
<a name="96" /><span class="Maybe">      96:</span> <span class="k"> *    @poweroff().  The PM core executes subsystem-level @prepare() for all</span>
<a name="97" /><span class="Maybe">      97:</span> <span class="k"> *    devices before starting to invoke suspend callbacks for any of them, so</span>
<a name="98" /><span class="Maybe">      98:</span> <span class="k"> *    generally devices may be assumed to be functional or to respond to</span>
<a name="99" /><span class="Maybe">      99:</span> <span class="k"> *    runtime resume requests while @prepare() is being executed.  However,</span>
<a name="100" /><span class="Maybe">     100:</span> <span class="k"> *    device drivers may NOT assume anything about the availability of user</span>
<a name="101" /><span class="Maybe">     101:</span> <span class="k"> *    space at that time and it is NOT valid to request firmware from within</span>
<a name="102" /><span class="Maybe">     102:</span> <span class="k"> *    @prepare() (it&apos;s too late to do that).  It also is NOT valid to allocate</span>
<a name="103" /><span class="Maybe">     103:</span> <span class="k"> *    substantial amounts of memory from @prepare() in the GFP_KERNEL mode.</span>
<a name="104" /><span class="Maybe">     104:</span> <span class="k"> *    [To work around these limitations, drivers may register suspend and</span>
<a name="105" /><span class="Maybe">     105:</span> <span class="k"> *    hibernation notifiers to be executed before the freezing of tasks.]</span>
<a name="106" /><span class="Maybe">     106:</span> <span class="k"> *</span>
<a name="107" /><span class="Maybe">     107:</span> <span class="k"> * @complete: Undo the changes made by @prepare().  This method is executed for</span>
<a name="108" /><span class="Maybe">     108:</span> <span class="k"> *    all kinds of resume transitions, following one of the resume callbacks:</span>
<a name="109" /><span class="Maybe">     109:</span> <span class="k"> *    @resume(), @thaw(), @restore().  Also called if the state transition</span>
<a name="110" /><span class="Maybe">     110:</span> <span class="k"> *    fails before the driver&apos;s suspend callback: @suspend(), @freeze() or</span>
<a name="111" /><span class="Maybe">     111:</span> <span class="k"> *    @poweroff(), can be executed (e.g. if the suspend callback fails for one</span>
<a name="112" /><span class="Maybe">     112:</span> <span class="k"> *    of the other devices that the PM core has unsuccessfully attempted to</span>
<a name="113" /><span class="Maybe">     113:</span> <span class="k"> *    suspend earlier).</span>
<a name="114" /><span class="Maybe">     114:</span> <span class="k"> *    The PM core executes subsystem-level @complete() after it has executed</span>
<a name="115" /><span class="Maybe">     115:</span> <span class="k"> *    the appropriate resume callbacks for all devices.</span>
<a name="116" /><span class="Maybe">     116:</span> <span class="k"> *</span>
<a name="117" /><span class="Maybe">     117:</span> <span class="k"> * @suspend: Executed before putting the system into a sleep state in which the</span>
<a name="118" /><span class="Maybe">     118:</span> <span class="k"> *    contents of main memory are preserved.  The exact action to perform</span>
<a name="119" /><span class="Maybe">     119:</span> <span class="k"> *    depends on the device&apos;s subsystem (PM domain, device type, class or bus</span>
<a name="120" /><span class="Maybe">     120:</span> <span class="k"> *    type), but generally the device must be quiescent after subsystem-level</span>
<a name="121" /><span class="Maybe">     121:</span> <span class="k"> *    @suspend() has returned, so that it doesn&apos;t do any I/O or DMA.</span>
<a name="122" /><span class="Maybe">     122:</span> <span class="k"> *    Subsystem-level @suspend() is executed for all devices after invoking</span>
<a name="123" /><span class="Maybe">     123:</span> <span class="k"> *    subsystem-level @prepare() for all of them.</span>
<a name="124" /><span class="Maybe">     124:</span> <span class="k"> *</span>
<a name="125" /><span class="Maybe">     125:</span> <span class="k"> * @suspend_late: Continue operations started by @suspend().  For a number of</span>
<a name="126" /><span class="Maybe">     126:</span> <span class="k"> *    devices @suspend_late() may point to the same callback routine as the</span>
<a name="127" /><span class="Maybe">     127:</span> <span class="k"> *    runtime suspend callback.</span>
<a name="128" /><span class="Maybe">     128:</span> <span class="k"> *</span>
<a name="129" /><span class="Maybe">     129:</span> <span class="k"> * @resume: Executed after waking the system up from a sleep state in which the</span>
<a name="130" /><span class="Maybe">     130:</span> <span class="k"> *    contents of main memory were preserved.  The exact action to perform</span>
<a name="131" /><span class="Maybe">     131:</span> <span class="k"> *    depends on the device&apos;s subsystem, but generally the driver is expected</span>
<a name="132" /><span class="Maybe">     132:</span> <span class="k"> *    to start working again, responding to hardware events and software</span>
<a name="133" /><span class="Maybe">     133:</span> <span class="k"> *    requests (the device itself may be left in a low-power state, waiting</span>
<a name="134" /><span class="Maybe">     134:</span> <span class="k"> *    for a runtime resume to occur).  The state of the device at the time its</span>
<a name="135" /><span class="Maybe">     135:</span> <span class="k"> *    driver&apos;s @resume() callback is run depends on the platform and subsystem</span>
<a name="136" /><span class="Maybe">     136:</span> <span class="k"> *    the device belongs to.  On most platforms, there are no restrictions on</span>
<a name="137" /><span class="Maybe">     137:</span> <span class="k"> *    availability of resources like clocks during @resume().</span>
<a name="138" /><span class="Maybe">     138:</span> <span class="k"> *    Subsystem-level @resume() is executed for all devices after invoking</span>
<a name="139" /><span class="Maybe">     139:</span> <span class="k"> *    subsystem-level @resume_noirq() for all of them.</span>
<a name="140" /><span class="Maybe">     140:</span> <span class="k"> *</span>
<a name="141" /><span class="Maybe">     141:</span> <span class="k"> * @resume_early: Prepare to execute @resume().  For a number of devices</span>
<a name="142" /><span class="Maybe">     142:</span> <span class="k"> *    @resume_early() may point to the same callback routine as the runtime</span>
<a name="143" /><span class="Maybe">     143:</span> <span class="k"> *    resume callback.</span>
<a name="144" /><span class="Maybe">     144:</span> <span class="k"> *</span>
<a name="145" /><span class="Maybe">     145:</span> <span class="k"> * @freeze: Hibernation-specific, executed before creating a hibernation image.</span>
<a name="146" /><span class="Maybe">     146:</span> <span class="k"> *    Analogous to @suspend(), but it should not enable the device to signal</span>
<a name="147" /><span class="Maybe">     147:</span> <span class="k"> *    wakeup events or change its power state.  The majority of subsystems</span>
<a name="148" /><span class="Maybe">     148:</span> <span class="k"> *    (with the notable exception of the PCI bus type) expect the driver-level</span>
<a name="149" /><span class="Maybe">     149:</span> <span class="k"> *    @freeze() to save the device settings in memory to be used by @restore()</span>
<a name="150" /><span class="Maybe">     150:</span> <span class="k"> *    during the subsequent resume from hibernation.</span>
<a name="151" /><span class="Maybe">     151:</span> <span class="k"> *    Subsystem-level @freeze() is executed for all devices after invoking</span>
<a name="152" /><span class="Maybe">     152:</span> <span class="k"> *    subsystem-level @prepare() for all of them.</span>
<a name="153" /><span class="Maybe">     153:</span> <span class="k"> *</span>
<a name="154" /><span class="Maybe">     154:</span> <span class="k"> * @freeze_late: Continue operations started by @freeze().  Analogous to</span>
<a name="155" /><span class="Maybe">     155:</span> <span class="k"> *    @suspend_late(), but it should not enable the device to signal wakeup</span>
<a name="156" /><span class="Maybe">     156:</span> <span class="k"> *    events or change its power state.</span>
<a name="157" /><span class="Maybe">     157:</span> <span class="k"> *</span>
<a name="158" /><span class="Maybe">     158:</span> <span class="k"> * @thaw: Hibernation-specific, executed after creating a hibernation image OR</span>
<a name="159" /><span class="Maybe">     159:</span> <span class="k"> *    if the creation of an image has failed.  Also executed after a failing</span>
<a name="160" /><span class="Maybe">     160:</span> <span class="k"> *    attempt to restore the contents of main memory from such an image.</span>
<a name="161" /><span class="Maybe">     161:</span> <span class="k"> *    Undo the changes made by the preceding @freeze(), so the device can be</span>
<a name="162" /><span class="Maybe">     162:</span> <span class="k"> *    operated in the same way as immediately before the call to @freeze().</span>
<a name="163" /><span class="Maybe">     163:</span> <span class="k"> *    Subsystem-level @thaw() is executed for all devices after invoking</span>
<a name="164" /><span class="Maybe">     164:</span> <span class="k"> *    subsystem-level @thaw_noirq() for all of them.  It also may be executed</span>
<a name="165" /><span class="Maybe">     165:</span> <span class="k"> *    directly after @freeze() in case of a transition error.</span>
<a name="166" /><span class="Maybe">     166:</span> <span class="k"> *</span>
<a name="167" /><span class="Maybe">     167:</span> <span class="k"> * @thaw_early: Prepare to execute @thaw().  Undo the changes made by the</span>
<a name="168" /><span class="Maybe">     168:</span> <span class="k"> *    preceding @freeze_late().</span>
<a name="169" /><span class="Maybe">     169:</span> <span class="k"> *</span>
<a name="170" /><span class="Maybe">     170:</span> <span class="k"> * @poweroff: Hibernation-specific, executed after saving a hibernation image.</span>
<a name="171" /><span class="Maybe">     171:</span> <span class="k"> *    Analogous to @suspend(), but it need not save the device&apos;s settings in</span>
<a name="172" /><span class="Maybe">     172:</span> <span class="k"> *    memory.</span>
<a name="173" /><span class="Maybe">     173:</span> <span class="k"> *    Subsystem-level @poweroff() is executed for all devices after invoking</span>
<a name="174" /><span class="Maybe">     174:</span> <span class="k"> *    subsystem-level @prepare() for all of them.</span>
<a name="175" /><span class="Maybe">     175:</span> <span class="k"> *</span>
<a name="176" /><span class="Maybe">     176:</span> <span class="k"> * @poweroff_late: Continue operations started by @poweroff().  Analogous to</span>
<a name="177" /><span class="Maybe">     177:</span> <span class="k"> *    @suspend_late(), but it need not save the device&apos;s settings in memory.</span>
<a name="178" /><span class="Maybe">     178:</span> <span class="k"> *</span>
<a name="179" /><span class="Maybe">     179:</span> <span class="k"> * @restore: Hibernation-specific, executed after restoring the contents of main</span>
<a name="180" /><span class="Maybe">     180:</span> <span class="k"> *    memory from a hibernation image, analogous to @resume().</span>
<a name="181" /><span class="Maybe">     181:</span> <span class="k"> *</span>
<a name="182" /><span class="Maybe">     182:</span> <span class="k"> * @restore_early: Prepare to execute @restore(), analogous to @resume_early().</span>
<a name="183" /><span class="Maybe">     183:</span> <span class="k"> *</span>
<a name="184" /><span class="Maybe">     184:</span> <span class="k"> * @suspend_noirq: Complete the actions started by @suspend().  Carry out any</span>
<a name="185" /><span class="Maybe">     185:</span> <span class="k"> *    additional operations required for suspending the device that might be</span>
<a name="186" /><span class="Maybe">     186:</span> <span class="k"> *    racing with its driver&apos;s interrupt handler, which is guaranteed not to</span>
<a name="187" /><span class="Maybe">     187:</span> <span class="k"> *    run while @suspend_noirq() is being executed.</span>
<a name="188" /><span class="Maybe">     188:</span> <span class="k"> *    It generally is expected that the device will be in a low-power state</span>
<a name="189" /><span class="Maybe">     189:</span> <span class="k"> *    (appropriate for the target system sleep state) after subsystem-level</span>
<a name="190" /><span class="Maybe">     190:</span> <span class="k"> *    @suspend_noirq() has returned successfully.  If the device can generate</span>
<a name="191" /><span class="Maybe">     191:</span> <span class="k"> *    system wakeup signals and is enabled to wake up the system, it should be</span>
<a name="192" /><span class="Maybe">     192:</span> <span class="k"> *    configured to do so at that time.  However, depending on the platform</span>
<a name="193" /><span class="Maybe">     193:</span> <span class="k"> *    and device&apos;s subsystem, @suspend() or @suspend_late() may be allowed to</span>
<a name="194" /><span class="Maybe">     194:</span> <span class="k"> *    put the device into the low-power state and configure it to generate</span>
<a name="195" /><span class="Maybe">     195:</span> <span class="k"> *    wakeup signals, in which case it generally is not necessary to define</span>
<a name="196" /><span class="Maybe">     196:</span> <span class="k"> *    @suspend_noirq().</span>
<a name="197" /><span class="Maybe">     197:</span> <span class="k"> *</span>
<a name="198" /><span class="Maybe">     198:</span> <span class="k"> * @resume_noirq: Prepare for the execution of @resume() by carrying out any</span>
<a name="199" /><span class="Maybe">     199:</span> <span class="k"> *    operations required for resuming the device that might be racing with</span>
<a name="200" /><span class="Maybe">     200:</span> <span class="k"> *    its driver&apos;s interrupt handler, which is guaranteed not to run while</span>
<a name="201" /><span class="Maybe">     201:</span> <span class="k"> *    @resume_noirq() is being executed.</span>
<a name="202" /><span class="Maybe">     202:</span> <span class="k"> *</span>
<a name="203" /><span class="Maybe">     203:</span> <span class="k"> * @freeze_noirq: Complete the actions started by @freeze().  Carry out any</span>
<a name="204" /><span class="Maybe">     204:</span> <span class="k"> *    additional operations required for freezing the device that might be</span>
<a name="205" /><span class="Maybe">     205:</span> <span class="k"> *    racing with its driver&apos;s interrupt handler, which is guaranteed not to</span>
<a name="206" /><span class="Maybe">     206:</span> <span class="k"> *    run while @freeze_noirq() is being executed.</span>
<a name="207" /><span class="Maybe">     207:</span> <span class="k"> *    The power state of the device should not be changed by either @freeze(),</span>
<a name="208" /><span class="Maybe">     208:</span> <span class="k"> *    or @freeze_late(), or @freeze_noirq() and it should not be configured to</span>
<a name="209" /><span class="Maybe">     209:</span> <span class="k"> *    signal system wakeup by any of these callbacks.</span>
<a name="210" /><span class="Maybe">     210:</span> <span class="k"> *</span>
<a name="211" /><span class="Maybe">     211:</span> <span class="k"> * @thaw_noirq: Prepare for the execution of @thaw() by carrying out any</span>
<a name="212" /><span class="Maybe">     212:</span> <span class="k"> *    operations required for thawing the device that might be racing with its</span>
<a name="213" /><span class="Maybe">     213:</span> <span class="k"> *    driver&apos;s interrupt handler, which is guaranteed not to run while</span>
<a name="214" /><span class="Maybe">     214:</span> <span class="k"> *    @thaw_noirq() is being executed.</span>
<a name="215" /><span class="Maybe">     215:</span> <span class="k"> *</span>
<a name="216" /><span class="Maybe">     216:</span> <span class="k"> * @poweroff_noirq: Complete the actions started by @poweroff().  Analogous to</span>
<a name="217" /><span class="Maybe">     217:</span> <span class="k"> *    @suspend_noirq(), but it need not save the device&apos;s settings in memory.</span>
<a name="218" /><span class="Maybe">     218:</span> <span class="k"> *</span>
<a name="219" /><span class="Maybe">     219:</span> <span class="k"> * @restore_noirq: Prepare for the execution of @restore() by carrying out any</span>
<a name="220" /><span class="Maybe">     220:</span> <span class="k"> *    operations required for thawing the device that might be racing with its</span>
<a name="221" /><span class="Maybe">     221:</span> <span class="k"> *    driver&apos;s interrupt handler, which is guaranteed not to run while</span>
<a name="222" /><span class="Maybe">     222:</span> <span class="k"> *    @restore_noirq() is being executed.  Analogous to @resume_noirq().</span>
<a name="223" /><span class="Maybe">     223:</span> <span class="k"> *</span>
<a name="224" /><span class="Maybe">     224:</span> <span class="k"> * All of the above callbacks, except for @complete(), return error codes.</span>
<a name="225" /><span class="Maybe">     225:</span> <span class="k"> * However, the error codes returned by the resume operations, @resume(),</span>
<a name="226" /><span class="Maybe">     226:</span> <span class="k"> * @thaw(), @restore(), @resume_noirq(), @thaw_noirq(), and @restore_noirq(), do</span>
<a name="227" /><span class="Maybe">     227:</span> <span class="k"> * not cause the PM core to abort the resume transition during which they are</span>
<a name="228" /><span class="Maybe">     228:</span> <span class="k"> * returned.  The error codes returned in those cases are only printed by the PM</span>
<a name="229" /><span class="Maybe">     229:</span> <span class="k"> * core to the system logs for debugging purposes.  Still, it is recommended</span>
<a name="230" /><span class="Maybe">     230:</span> <span class="k"> * that drivers only return error codes from their resume methods in case of an</span>
<a name="231" /><span class="Maybe">     231:</span> <span class="k"> * unrecoverable failure (i.e. when the device being handled refuses to resume</span>
<a name="232" /><span class="Maybe">     232:</span> <span class="k"> * and becomes unusable) to allow us to modify the PM core in the future, so</span>
<a name="233" /><span class="Maybe">     233:</span> <span class="k"> * that it can avoid attempting to handle devices that failed to resume and</span>
<a name="234" /><span class="Maybe">     234:</span> <span class="k"> * their children.</span>
<a name="235" /><span class="Maybe">     235:</span> <span class="k"> *</span>
<a name="236" /><span class="Maybe">     236:</span> <span class="k"> * It is allowed to unregister devices while the above callbacks are being</span>
<a name="237" /><span class="Maybe">     237:</span> <span class="k"> * executed.  However, a callback routine must NOT try to unregister the device</span>
<a name="238" /><span class="Maybe">     238:</span> <span class="k"> * it was called for, although it may unregister children of that device (for</span>
<a name="239" /><span class="Maybe">     239:</span> <span class="k"> * example, if it detects that a child was unplugged while the system was</span>
<a name="240" /><span class="Maybe">     240:</span> <span class="k"> * asleep).</span>
<a name="241" /><span class="Maybe">     241:</span> <span class="k"> *</span>
<a name="242" /><span class="Maybe">     242:</span> <span class="k"> * Refer to Documentation/power/devices.txt for more information about the role</span>
<a name="243" /><span class="Maybe">     243:</span> <span class="k"> * of the above callbacks in the system suspend process.</span>
<a name="244" /><span class="Maybe">     244:</span> <span class="k"> *</span>
<a name="245" /><span class="Maybe">     245:</span> <span class="k"> * There also are callbacks related to runtime power management of devices.</span>
<a name="246" /><span class="Maybe">     246:</span> <span class="k"> * Again, these callbacks are executed by the PM core only for subsystems</span>
<a name="247" /><span class="Maybe">     247:</span> <span class="k"> * (PM domains, device types, classes and bus types) and the subsystem-level</span>
<a name="248" /><span class="Maybe">     248:</span> <span class="k"> * callbacks are supposed to invoke the driver callbacks.  Moreover, the exact</span>
<a name="249" /><span class="Maybe">     249:</span> <span class="k"> * actions to be performed by a device driver&apos;s callbacks generally depend on</span>
<a name="250" /><span class="Maybe">     250:</span> <span class="k"> * the platform and subsystem the device belongs to.</span>
<a name="251" /><span class="Maybe">     251:</span> <span class="k"> *</span>
<a name="252" /><span class="Maybe">     252:</span> <span class="k"> * @runtime_suspend: Prepare the device for a condition in which it won&apos;t be</span>
<a name="253" /><span class="Maybe">     253:</span> <span class="k"> *    able to communicate with the CPU(s) and RAM due to power management.</span>
<a name="254" /><span class="Maybe">     254:</span> <span class="k"> *    This need not mean that the device should be put into a low-power state.</span>
<a name="255" /><span class="Maybe">     255:</span> <span class="k"> *    For example, if the device is behind a link which is about to be turned</span>
<a name="256" /><span class="Maybe">     256:</span> <span class="k"> *    off, the device may remain at full power.  If the device does go to low</span>
<a name="257" /><span class="Maybe">     257:</span> <span class="k"> *    power and is capable of generating runtime wakeup events, remote wakeup</span>
<a name="258" /><span class="Maybe">     258:</span> <span class="k"> *    (i.e., a hardware mechanism allowing the device to request a change of</span>
<a name="259" /><span class="Maybe">     259:</span> <span class="k"> *    its power state via an interrupt) should be enabled for it.</span>
<a name="260" /><span class="Maybe">     260:</span> <span class="k"> *</span>
<a name="261" /><span class="Maybe">     261:</span> <span class="k"> * @runtime_resume: Put the device into the fully active state in response to a</span>
<a name="262" /><span class="Maybe">     262:</span> <span class="k"> *    wakeup event generated by hardware or at the request of software.  If</span>
<a name="263" /><span class="Maybe">     263:</span> <span class="k"> *    necessary, put the device into the full-power state and restore its</span>
<a name="264" /><span class="Maybe">     264:</span> <span class="k"> *    registers, so that it is fully operational.</span>
<a name="265" /><span class="Maybe">     265:</span> <span class="k"> *</span>
<a name="266" /><span class="Maybe">     266:</span> <span class="k"> * @runtime_idle: Device appears to be inactive and it might be put into a</span>
<a name="267" /><span class="Maybe">     267:</span> <span class="k"> *    low-power state if all of the necessary conditions are satisfied.  Check</span>
<a name="268" /><span class="Maybe">     268:</span> <span class="k"> *    these conditions and handle the device as appropriate, possibly queueing</span>
<a name="269" /><span class="Maybe">     269:</span> <span class="k"> *    a suspend request for it.  The return value is ignored by the PM core.</span>
<a name="270" /><span class="Maybe">     270:</span> <span class="k"> *</span>
<a name="271" /><span class="Maybe">     271:</span> <span class="k"> * Refer to Documentation/power/runtime_pm.txt for more information about the</span>
<a name="272" /><span class="Maybe">     272:</span> <span class="k"> * role of the above callbacks in device runtime power management.</span>
<a name="273" /><span class="Maybe">     273:</span> <span class="k"> *</span>
<a name="274" /><span class="Maybe">     274:</span> <span class="k"> */</span>
<a name="275" /><span class="Maybe">     275:</span> 
<a name="276" /><span class="Maybe">     276:</span> <span class="m">struct</span> <span class="b">dev_pm_ops</span> <span class="f">{</span>
<a name="277" /><span class="Maybe">     277:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">prepare</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="278" /><span class="Maybe">     278:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">complete</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="279" /><span class="Maybe">     279:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">suspend</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="280" /><span class="Maybe">     280:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">resume</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="281" /><span class="Maybe">     281:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">freeze</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="282" /><span class="Maybe">     282:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">thaw</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="283" /><span class="Maybe">     283:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">poweroff</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="284" /><span class="Maybe">     284:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">restore</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="285" /><span class="Maybe">     285:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">suspend_late</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="286" /><span class="Maybe">     286:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">resume_early</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="287" /><span class="Maybe">     287:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">freeze_late</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="288" /><span class="Maybe">     288:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">thaw_early</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="289" /><span class="Maybe">     289:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">poweroff_late</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="290" /><span class="Maybe">     290:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">restore_early</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="291" /><span class="Maybe">     291:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">suspend_noirq</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="292" /><span class="Maybe">     292:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">resume_noirq</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="293" /><span class="Maybe">     293:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">freeze_noirq</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="294" /><span class="Maybe">     294:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">thaw_noirq</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="295" /><span class="Maybe">     295:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">poweroff_noirq</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="296" /><span class="Maybe">     296:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">restore_noirq</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="297" /><span class="Maybe">     297:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">runtime_suspend</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="298" /><span class="Maybe">     298:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">runtime_resume</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="299" /><span class="Maybe">     299:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">runtime_idle</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="300" /><span class="Maybe">     300:</span> <span class="f">}</span><span class="f">;</span>
<a name="301" /><span class="Maybe">     301:</span> 
<a name="302" /><span class="Maybe">     302:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1BNX1NMRUVQXzA_"><span class="b">CONFIG_PM_SLEEP</span></a>
<a name="303" /><span class="Maybe">     303:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VUX1NZU1RFTV9TTEVFUF9QTV9PUFNfMA__"><span class="b">SET_SYSTEM_SLEEP_PM_OPS</span></a><span class="f">(</span><span class="b">suspend_fn</span><span class="f">,</span> <span class="b">resume_fn</span><span class="f">)</span> \
<a name="304" /><span class="Maybe">     304:</span>     <span class="f">.</span><span class="b">suspend</span> <span class="f">=</span> <span class="b">suspend_fn</span><span class="f">,</span> \
<a name="305" /><span class="Maybe">     305:</span>     <span class="f">.</span><span class="b">resume</span> <span class="f">=</span> <span class="b">resume_fn</span><span class="f">,</span> \
<a name="306" /><span class="Maybe">     306:</span>     <span class="f">.</span><span class="b">freeze</span> <span class="f">=</span> <span class="b">suspend_fn</span><span class="f">,</span> \
<a name="307" /><span class="Maybe">     307:</span>     <span class="f">.</span><span class="b">thaw</span> <span class="f">=</span> <span class="b">resume_fn</span><span class="f">,</span> \
<a name="308" /><span class="Maybe">     308:</span>     <span class="f">.</span><span class="b">poweroff</span> <span class="f">=</span> <span class="b">suspend_fn</span><span class="f">,</span> \
<a name="309" /><span class="Maybe">     309:</span>     <span class="f">.</span><span class="b">restore</span> <span class="f">=</span> <span class="b">resume_fn</span><span class="f">,</span>
<a name="310" /><span class="False">     310:</span> <span class="f">#</span><span class="n">else</span>
<a name="311" /><span class="False">     311:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VUX1NZU1RFTV9TTEVFUF9QTV9PUFNfMA__"><span class="b">SET_SYSTEM_SLEEP_PM_OPS</span></a><span class="f">(</span><span class="b">suspend_fn</span><span class="f">,</span> <span class="b">resume_fn</span><span class="f">)</span>
<a name="312" /><span class="Maybe">     312:</span> <span class="f">#</span><span class="n">endif</span>
<a name="313" /><span class="Maybe">     313:</span> 
<a name="314" /><span class="Maybe">     314:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1BNX1JVTlRJTUVfMA__"><span class="b">CONFIG_PM_RUNTIME</span></a>
<a name="315" /><span class="Maybe">     315:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VUX1JVTlRJTUVfUE1fT1BTXzA_"><span class="b">SET_RUNTIME_PM_OPS</span></a><span class="f">(</span><span class="b">suspend_fn</span><span class="f">,</span> <span class="b">resume_fn</span><span class="f">,</span> <span class="b">idle_fn</span><span class="f">)</span> \
<a name="316" /><span class="Maybe">     316:</span>     <span class="f">.</span><span class="b">runtime_suspend</span> <span class="f">=</span> <span class="b">suspend_fn</span><span class="f">,</span> \
<a name="317" /><span class="Maybe">     317:</span>     <span class="f">.</span><span class="b">runtime_resume</span> <span class="f">=</span> <span class="b">resume_fn</span><span class="f">,</span> \
<a name="318" /><span class="Maybe">     318:</span>     <span class="f">.</span><span class="b">runtime_idle</span> <span class="f">=</span> <span class="b">idle_fn</span><span class="f">,</span>
<a name="319" /><span class="False">     319:</span> <span class="f">#</span><span class="n">else</span>
<a name="320" /><span class="False">     320:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VUX1JVTlRJTUVfUE1fT1BTXzA_"><span class="b">SET_RUNTIME_PM_OPS</span></a><span class="f">(</span><span class="b">suspend_fn</span><span class="f">,</span> <span class="b">resume_fn</span><span class="f">,</span> <span class="b">idle_fn</span><span class="f">)</span>
<a name="321" /><span class="Maybe">     321:</span> <span class="f">#</span><span class="n">endif</span>
<a name="322" /><span class="Maybe">     322:</span> 
<a name="323" /><span class="Maybe">     323:</span> <span class="k">/*</span>
<a name="324" /><span class="Maybe">     324:</span> <span class="k"> * Use this if you want to use the same suspend and resume callbacks for suspend</span>
<a name="325" /><span class="Maybe">     325:</span> <span class="k"> * to RAM and hibernation.</span>
<a name="326" /><span class="Maybe">     326:</span> <span class="k"> */</span>
<a name="327" /><span class="Maybe">     327:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0lNUExFX0RFVl9QTV9PUFNfMA__"><span class="b">SIMPLE_DEV_PM_OPS</span></a><span class="f">(</span><span class="b">name</span><span class="f">,</span> <span class="b">suspend_fn</span><span class="f">,</span> <span class="b">resume_fn</span><span class="f">)</span> \
<a name="328" /><span class="Maybe">     328:</span> <span class="m">const</span> <span class="m">struct</span> <span class="b">dev_pm_ops</span> <span class="b">name</span> <span class="f">=</span> <span class="f">{</span> \
<a name="329" /><span class="Maybe">     329:</span>     <a href="cpu.c_macros_noref.html#_U0VUX1NZU1RFTV9TTEVFUF9QTV9PUFNfMA__"><span class="b">SET_SYSTEM_SLEEP_PM_OPS</span></a><span class="f">(</span><span class="b">suspend_fn</span><span class="f">,</span> <span class="b">resume_fn</span><span class="f">)</span> \
<a name="330" /><span class="Maybe">     330:</span> <span class="f">}</span>
<a name="331" /><span class="Maybe">     331:</span> 
<a name="332" /><span class="Maybe">     332:</span> <span class="k">/*</span>
<a name="333" /><span class="Maybe">     333:</span> <span class="k"> * Use this for defining a set of PM operations to be used in all situations</span>
<a name="334" /><span class="Maybe">     334:</span> <span class="k"> * (sustem suspend, hibernation or runtime PM).</span>
<a name="335" /><span class="Maybe">     335:</span> <span class="k"> * NOTE: In general, system suspend callbacks, .suspend() and .resume(), should</span>
<a name="336" /><span class="Maybe">     336:</span> <span class="k"> * be different from the corresponding runtime PM callbacks, .runtime_suspend(),</span>
<a name="337" /><span class="Maybe">     337:</span> <span class="k"> * and .runtime_resume(), because .runtime_suspend() always works on an already</span>
<a name="338" /><span class="Maybe">     338:</span> <span class="k"> * quiescent device, while .suspend() should assume that the device may be doing</span>
<a name="339" /><span class="Maybe">     339:</span> <span class="k"> * something when it is called (it should ensure that the device will be</span>
<a name="340" /><span class="Maybe">     340:</span> <span class="k"> * quiescent after it has returned).  Therefore it&apos;s better to point the &quot;late&quot;</span>
<a name="341" /><span class="Maybe">     341:</span> <span class="k"> * suspend and &quot;early&quot; resume callback pointers, .suspend_late() and</span>
<a name="342" /><span class="Maybe">     342:</span> <span class="k"> * .resume_early(), to the same routines as .runtime_suspend() and</span>
<a name="343" /><span class="Maybe">     343:</span> <span class="k"> * .runtime_resume(), respectively (and analogously for hibernation).</span>
<a name="344" /><span class="Maybe">     344:</span> <span class="k"> */</span>
<a name="345" /><span class="Maybe">     345:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_VU5JVkVSU0FMX0RFVl9QTV9PUFNfMA__"><span class="b">UNIVERSAL_DEV_PM_OPS</span></a><span class="f">(</span><span class="b">name</span><span class="f">,</span> <span class="b">suspend_fn</span><span class="f">,</span> <span class="b">resume_fn</span><span class="f">,</span> <span class="b">idle_fn</span><span class="f">)</span> \
<a name="346" /><span class="Maybe">     346:</span> <span class="m">const</span> <span class="m">struct</span> <span class="b">dev_pm_ops</span> <span class="b">name</span> <span class="f">=</span> <span class="f">{</span> \
<a name="347" /><span class="Maybe">     347:</span>     <a href="cpu.c_macros_noref.html#_U0VUX1NZU1RFTV9TTEVFUF9QTV9PUFNfMA__"><span class="b">SET_SYSTEM_SLEEP_PM_OPS</span></a><span class="f">(</span><span class="b">suspend_fn</span><span class="f">,</span> <span class="b">resume_fn</span><span class="f">)</span> \
<a name="348" /><span class="Maybe">     348:</span>     <a href="cpu.c_macros_noref.html#_U0VUX1JVTlRJTUVfUE1fT1BTXzA_"><span class="b">SET_RUNTIME_PM_OPS</span></a><span class="f">(</span><span class="b">suspend_fn</span><span class="f">,</span> <span class="b">resume_fn</span><span class="f">,</span> <span class="b">idle_fn</span><span class="f">)</span> \
<a name="349" /><span class="Maybe">     349:</span> <span class="f">}</span>
<a name="350" /><span class="Maybe">     350:</span> 
<a name="351" /><span class="Maybe">     351:</span> <span class="k">/**</span>
<a name="352" /><span class="Maybe">     352:</span> <span class="k"> * PM_EVENT_ messages</span>
<a name="353" /><span class="Maybe">     353:</span> <span class="k"> *</span>
<a name="354" /><span class="Maybe">     354:</span> <span class="k"> * The following PM_EVENT_ messages are defined for the internal use of the PM</span>
<a name="355" /><span class="Maybe">     355:</span> <span class="k"> * core, in order to provide a mechanism allowing the high level suspend and</span>
<a name="356" /><span class="Maybe">     356:</span> <span class="k"> * hibernation code to convey the necessary information to the device PM core</span>
<a name="357" /><span class="Maybe">     357:</span> <span class="k"> * code:</span>
<a name="358" /><span class="Maybe">     358:</span> <span class="k"> *</span>
<a name="359" /><span class="Maybe">     359:</span> <span class="k"> * ON        No transition.</span>
<a name="360" /><span class="Maybe">     360:</span> <span class="k"> *</span>
<a name="361" /><span class="Maybe">     361:</span> <span class="k"> * FREEZE     System is going to hibernate, call -&gt;prepare() and -&gt;freeze()</span>
<a name="362" /><span class="Maybe">     362:</span> <span class="k"> *        for all devices.</span>
<a name="363" /><span class="Maybe">     363:</span> <span class="k"> *</span>
<a name="364" /><span class="Maybe">     364:</span> <span class="k"> * SUSPEND    System is going to suspend, call -&gt;prepare() and -&gt;suspend()</span>
<a name="365" /><span class="Maybe">     365:</span> <span class="k"> *        for all devices.</span>
<a name="366" /><span class="Maybe">     366:</span> <span class="k"> *</span>
<a name="367" /><span class="Maybe">     367:</span> <span class="k"> * HIBERNATE    Hibernation image has been saved, call -&gt;prepare() and</span>
<a name="368" /><span class="Maybe">     368:</span> <span class="k"> *        -&gt;poweroff() for all devices.</span>
<a name="369" /><span class="Maybe">     369:</span> <span class="k"> *</span>
<a name="370" /><span class="Maybe">     370:</span> <span class="k"> * QUIESCE    Contents of main memory are going to be restored from a (loaded)</span>
<a name="371" /><span class="Maybe">     371:</span> <span class="k"> *        hibernation image, call -&gt;prepare() and -&gt;freeze() for all</span>
<a name="372" /><span class="Maybe">     372:</span> <span class="k"> *        devices.</span>
<a name="373" /><span class="Maybe">     373:</span> <span class="k"> *</span>
<a name="374" /><span class="Maybe">     374:</span> <span class="k"> * RESUME    System is resuming, call -&gt;resume() and -&gt;complete() for all</span>
<a name="375" /><span class="Maybe">     375:</span> <span class="k"> *        devices.</span>
<a name="376" /><span class="Maybe">     376:</span> <span class="k"> *</span>
<a name="377" /><span class="Maybe">     377:</span> <span class="k"> * THAW        Hibernation image has been created, call -&gt;thaw() and</span>
<a name="378" /><span class="Maybe">     378:</span> <span class="k"> *        -&gt;complete() for all devices.</span>
<a name="379" /><span class="Maybe">     379:</span> <span class="k"> *</span>
<a name="380" /><span class="Maybe">     380:</span> <span class="k"> * RESTORE    Contents of main memory have been restored from a hibernation</span>
<a name="381" /><span class="Maybe">     381:</span> <span class="k"> *        image, call -&gt;restore() and -&gt;complete() for all devices.</span>
<a name="382" /><span class="Maybe">     382:</span> <span class="k"> *</span>
<a name="383" /><span class="Maybe">     383:</span> <span class="k"> * RECOVER    Creation of a hibernation image or restoration of the main</span>
<a name="384" /><span class="Maybe">     384:</span> <span class="k"> *        memory contents from a hibernation image has failed, call</span>
<a name="385" /><span class="Maybe">     385:</span> <span class="k"> *        -&gt;thaw() and -&gt;complete() for all devices.</span>
<a name="386" /><span class="Maybe">     386:</span> <span class="k"> *</span>
<a name="387" /><span class="Maybe">     387:</span> <span class="k"> * The following PM_EVENT_ messages are defined for internal use by</span>
<a name="388" /><span class="Maybe">     388:</span> <span class="k"> * kernel subsystems.  They are never issued by the PM core.</span>
<a name="389" /><span class="Maybe">     389:</span> <span class="k"> *</span>
<a name="390" /><span class="Maybe">     390:</span> <span class="k"> * USER_SUSPEND        Manual selective suspend was issued by userspace.</span>
<a name="391" /><span class="Maybe">     391:</span> <span class="k"> *</span>
<a name="392" /><span class="Maybe">     392:</span> <span class="k"> * USER_RESUME        Manual selective resume was issued by userspace.</span>
<a name="393" /><span class="Maybe">     393:</span> <span class="k"> *</span>
<a name="394" /><span class="Maybe">     394:</span> <span class="k"> * REMOTE_WAKEUP    Remote-wakeup request was received from the device.</span>
<a name="395" /><span class="Maybe">     395:</span> <span class="k"> *</span>
<a name="396" /><span class="Maybe">     396:</span> <span class="k"> * AUTO_SUSPEND        Automatic (device idle) runtime suspend was</span>
<a name="397" /><span class="Maybe">     397:</span> <span class="k"> *            initiated by the subsystem.</span>
<a name="398" /><span class="Maybe">     398:</span> <span class="k"> *</span>
<a name="399" /><span class="Maybe">     399:</span> <span class="k"> * AUTO_RESUME        Automatic (device needed) runtime resume was</span>
<a name="400" /><span class="Maybe">     400:</span> <span class="k"> *            requested by a driver.</span>
<a name="401" /><span class="Maybe">     401:</span> <span class="k"> */</span>
<a name="402" /><span class="Maybe">     402:</span> 
<a name="403" /><span class="Maybe">     403:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfSU5WQUxJRF8w"><span class="b">PM_EVENT_INVALID</span></a>    <span class="f">(</span><span class="f">-</span><span class="c">1</span><span class="f">)</span>
<a name="404" /><span class="Maybe">     404:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfT05fMA__"><span class="b">PM_EVENT_ON</span></a>        <span class="c">0x0000</span>
<a name="405" /><span class="Maybe">     405:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfRlJFRVpFXzA_"><span class="b">PM_EVENT_FREEZE</span></a>     <span class="c">0x0001</span>
<a name="406" /><span class="Maybe">     406:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfU1VTUEVORF8w"><span class="b">PM_EVENT_SUSPEND</span></a>    <span class="c">0x0002</span>
<a name="407" /><span class="Maybe">     407:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfSElCRVJOQVRFXzA_"><span class="b">PM_EVENT_HIBERNATE</span></a>    <span class="c">0x0004</span>
<a name="408" /><span class="Maybe">     408:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUVVJRVNDRV8w"><span class="b">PM_EVENT_QUIESCE</span></a>    <span class="c">0x0008</span>
<a name="409" /><span class="Maybe">     409:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVTVU1FXzA_"><span class="b">PM_EVENT_RESUME</span></a>        <span class="c">0x0010</span>
<a name="410" /><span class="Maybe">     410:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfVEhBV18w"><span class="b">PM_EVENT_THAW</span></a>        <span class="c">0x0020</span>
<a name="411" /><span class="Maybe">     411:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVTVE9SRV8w"><span class="b">PM_EVENT_RESTORE</span></a>    <span class="c">0x0040</span>
<a name="412" /><span class="Maybe">     412:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVDT1ZFUl8w"><span class="b">PM_EVENT_RECOVER</span></a>    <span class="c">0x0080</span>
<a name="413" /><span class="Maybe">     413:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfVVNFUl8w"><span class="b">PM_EVENT_USER</span></a>        <span class="c">0x0100</span>
<a name="414" /><span class="Maybe">     414:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVNT1RFXzA_"><span class="b">PM_EVENT_REMOTE</span></a>        <span class="c">0x0200</span>
<a name="415" /><span class="Maybe">     415:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfQVVUT18w"><span class="b">PM_EVENT_AUTO</span></a>        <span class="c">0x0400</span>
<a name="416" /><span class="Maybe">     416:</span> 
<a name="417" /><span class="Maybe">     417:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfU0xFRVBfMA__"><span class="b">PM_EVENT_SLEEP</span></a>        <span class="f">(</span><a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfU1VTUEVORF8w"><span class="b">PM_EVENT_SUSPEND</span></a> <span class="f">|</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfSElCRVJOQVRFXzA_"><span class="b">PM_EVENT_HIBERNATE</span></a><span class="f">)</span>
<a name="418" /><span class="Maybe">     418:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfVVNFUl9TVVNQRU5EXzA_"><span class="b">PM_EVENT_USER_SUSPEND</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfVVNFUl8w"><span class="b">PM_EVENT_USER</span></a> <span class="f">|</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfU1VTUEVORF8w"><span class="b">PM_EVENT_SUSPEND</span></a><span class="f">)</span>
<a name="419" /><span class="Maybe">     419:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfVVNFUl9SRVNVTUVfMA__"><span class="b">PM_EVENT_USER_RESUME</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfVVNFUl8w"><span class="b">PM_EVENT_USER</span></a> <span class="f">|</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVTVU1FXzA_"><span class="b">PM_EVENT_RESUME</span></a><span class="f">)</span>
<a name="420" /><span class="Maybe">     420:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVNT1RFX1JFU1VNRV8w"><span class="b">PM_EVENT_REMOTE_RESUME</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVNT1RFXzA_"><span class="b">PM_EVENT_REMOTE</span></a> <span class="f">|</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVTVU1FXzA_"><span class="b">PM_EVENT_RESUME</span></a><span class="f">)</span>
<a name="421" /><span class="Maybe">     421:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfQVVUT19TVVNQRU5EXzA_"><span class="b">PM_EVENT_AUTO_SUSPEND</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfQVVUT18w"><span class="b">PM_EVENT_AUTO</span></a> <span class="f">|</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfU1VTUEVORF8w"><span class="b">PM_EVENT_SUSPEND</span></a><span class="f">)</span>
<a name="422" /><span class="Maybe">     422:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfQVVUT19SRVNVTUVfMA__"><span class="b">PM_EVENT_AUTO_RESUME</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfQVVUT18w"><span class="b">PM_EVENT_AUTO</span></a> <span class="f">|</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVTVU1FXzA_"><span class="b">PM_EVENT_RESUME</span></a><span class="f">)</span>
<a name="423" /><span class="Maybe">     423:</span> 
<a name="424" /><span class="Maybe">     424:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19JTlZBTElEXzA_"><span class="b">PMSG_INVALID</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span><span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfSU5WQUxJRF8w"><span class="b">PM_EVENT_INVALID</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="425" /><span class="Maybe">     425:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19PTl8w"><span class="b">PMSG_ON</span></a>        <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span><span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfT05fMA__"><span class="b">PM_EVENT_ON</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="426" /><span class="Maybe">     426:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19GUkVFWkVfMA__"><span class="b">PMSG_FREEZE</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span><span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfRlJFRVpFXzA_"><span class="b">PM_EVENT_FREEZE</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="427" /><span class="Maybe">     427:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19RVUlFU0NFXzA_"><span class="b">PMSG_QUIESCE</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span><span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUVVJRVNDRV8w"><span class="b">PM_EVENT_QUIESCE</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="428" /><span class="Maybe">     428:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19TVVNQRU5EXzA_"><span class="b">PMSG_SUSPEND</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span><span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfU1VTUEVORF8w"><span class="b">PM_EVENT_SUSPEND</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="429" /><span class="Maybe">     429:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19ISUJFUk5BVEVfMA__"><span class="b">PMSG_HIBERNATE</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span><span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfSElCRVJOQVRFXzA_"><span class="b">PM_EVENT_HIBERNATE</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="430" /><span class="Maybe">     430:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19SRVNVTUVfMA__"><span class="b">PMSG_RESUME</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span><span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVTVU1FXzA_"><span class="b">PM_EVENT_RESUME</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="431" /><span class="Maybe">     431:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19USEFXXzA_"><span class="b">PMSG_THAW</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span><span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfVEhBV18w"><span class="b">PM_EVENT_THAW</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="432" /><span class="Maybe">     432:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19SRVNUT1JFXzA_"><span class="b">PMSG_RESTORE</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span><span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVTVE9SRV8w"><span class="b">PM_EVENT_RESTORE</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="433" /><span class="Maybe">     433:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19SRUNPVkVSXzA_"><span class="b">PMSG_RECOVER</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span><span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVDT1ZFUl8w"><span class="b">PM_EVENT_RECOVER</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="434" /><span class="Maybe">     434:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19VU0VSX1NVU1BFTkRfMA__"><span class="b">PMSG_USER_SUSPEND</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span> \
<a name="435" /><span class="Maybe">     435:</span>                     <span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfVVNFUl9TVVNQRU5EXzA_"><span class="b">PM_EVENT_USER_SUSPEND</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="436" /><span class="Maybe">     436:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19VU0VSX1JFU1VNRV8w"><span class="b">PMSG_USER_RESUME</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span> \
<a name="437" /><span class="Maybe">     437:</span>                     <span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfVVNFUl9SRVNVTUVfMA__"><span class="b">PM_EVENT_USER_RESUME</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="438" /><span class="Maybe">     438:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19SRU1PVEVfUkVTVU1FXzA_"><span class="b">PMSG_REMOTE_RESUME</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span> \
<a name="439" /><span class="Maybe">     439:</span>                     <span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUkVNT1RFX1JFU1VNRV8w"><span class="b">PM_EVENT_REMOTE_RESUME</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="440" /><span class="Maybe">     440:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19BVVRPX1NVU1BFTkRfMA__"><span class="b">PMSG_AUTO_SUSPEND</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span> \
<a name="441" /><span class="Maybe">     441:</span>                     <span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfQVVUT19TVVNQRU5EXzA_"><span class="b">PM_EVENT_AUTO_SUSPEND</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="442" /><span class="Maybe">     442:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19BVVRPX1JFU1VNRV8w"><span class="b">PMSG_AUTO_RESUME</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">pm_message</span><span class="f">)</span> \
<a name="443" /><span class="Maybe">     443:</span>                     <span class="f">{</span> <span class="f">.</span><span class="b">event</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfQVVUT19SRVNVTUVfMA__"><span class="b">PM_EVENT_AUTO_RESUME</span></a><span class="f">,</span> <span class="f">}</span><span class="f">)</span>
<a name="444" /><span class="Maybe">     444:</span> 
<a name="445" /><span class="Maybe">     445:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1TR19JU19BVVRPXzA_"><span class="b">PMSG_IS_AUTO</span></a><span class="f">(</span><span class="b">msg</span><span class="f">)</span>    <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">msg</span><span class="f">)</span><span class="f">.</span><span class="b">event</span> <span class="f">&amp;</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfQVVUT18w"><span class="b">PM_EVENT_AUTO</span></a><span class="f">)</span> <span class="f">!=</span> <span class="c">0</span><span class="f">)</span>
<a name="446" /><span class="Maybe">     446:</span> 
<a name="447" /><span class="Maybe">     447:</span> <span class="k">/**</span>
<a name="448" /><span class="Maybe">     448:</span> <span class="k"> * Device run-time power management status.</span>
<a name="449" /><span class="Maybe">     449:</span> <span class="k"> *</span>
<a name="450" /><span class="Maybe">     450:</span> <span class="k"> * These status labels are used internally by the PM core to indicate the</span>
<a name="451" /><span class="Maybe">     451:</span> <span class="k"> * current status of a device with respect to the PM core operations.  They do</span>
<a name="452" /><span class="Maybe">     452:</span> <span class="k"> * not reflect the actual power state of the device or its status as seen by the</span>
<a name="453" /><span class="Maybe">     453:</span> <span class="k"> * driver.</span>
<a name="454" /><span class="Maybe">     454:</span> <span class="k"> *</span>
<a name="455" /><span class="Maybe">     455:</span> <span class="k"> * RPM_ACTIVE        Device is fully operational.  Indicates that the device</span>
<a name="456" /><span class="Maybe">     456:</span> <span class="k"> *            bus type&apos;s -&gt;runtime_resume() callback has completed</span>
<a name="457" /><span class="Maybe">     457:</span> <span class="k"> *            successfully.</span>
<a name="458" /><span class="Maybe">     458:</span> <span class="k"> *</span>
<a name="459" /><span class="Maybe">     459:</span> <span class="k"> * RPM_SUSPENDED    Device bus type&apos;s -&gt;runtime_suspend() callback has</span>
<a name="460" /><span class="Maybe">     460:</span> <span class="k"> *            completed successfully.  The device is regarded as</span>
<a name="461" /><span class="Maybe">     461:</span> <span class="k"> *            suspended.</span>
<a name="462" /><span class="Maybe">     462:</span> <span class="k"> *</span>
<a name="463" /><span class="Maybe">     463:</span> <span class="k"> * RPM_RESUMING        Device bus type&apos;s -&gt;runtime_resume() callback is being</span>
<a name="464" /><span class="Maybe">     464:</span> <span class="k"> *            executed.</span>
<a name="465" /><span class="Maybe">     465:</span> <span class="k"> *</span>
<a name="466" /><span class="Maybe">     466:</span> <span class="k"> * RPM_SUSPENDING    Device bus type&apos;s -&gt;runtime_suspend() callback is being</span>
<a name="467" /><span class="Maybe">     467:</span> <span class="k"> *            executed.</span>
<a name="468" /><span class="Maybe">     468:</span> <span class="k"> */</span>
<a name="469" /><span class="Maybe">     469:</span> 
<a name="470" /><span class="Maybe">     470:</span> <span class="m">enum</span> <span class="b">rpm_status</span> <span class="f">{</span>
<a name="471" /><span class="Maybe">     471:</span>     <span class="b">RPM_ACTIVE</span> <span class="f">=</span> <span class="c">0</span><span class="f">,</span>
<a name="472" /><span class="Maybe">     472:</span>     <span class="b">RPM_RESUMING</span><span class="f">,</span>
<a name="473" /><span class="Maybe">     473:</span>     <span class="b">RPM_SUSPENDED</span><span class="f">,</span>
<a name="474" /><span class="Maybe">     474:</span>     <span class="b">RPM_SUSPENDING</span><span class="f">,</span>
<a name="475" /><span class="Maybe">     475:</span> <span class="f">}</span><span class="f">;</span>
<a name="476" /><span class="Maybe">     476:</span> 
<a name="477" /><span class="Maybe">     477:</span> <span class="k">/**</span>
<a name="478" /><span class="Maybe">     478:</span> <span class="k"> * Device run-time power management request types.</span>
<a name="479" /><span class="Maybe">     479:</span> <span class="k"> *</span>
<a name="480" /><span class="Maybe">     480:</span> <span class="k"> * RPM_REQ_NONE        Do nothing.</span>
<a name="481" /><span class="Maybe">     481:</span> <span class="k"> *</span>
<a name="482" /><span class="Maybe">     482:</span> <span class="k"> * RPM_REQ_IDLE        Run the device bus type&apos;s -&gt;runtime_idle() callback</span>
<a name="483" /><span class="Maybe">     483:</span> <span class="k"> *</span>
<a name="484" /><span class="Maybe">     484:</span> <span class="k"> * RPM_REQ_SUSPEND    Run the device bus type&apos;s -&gt;runtime_suspend() callback</span>
<a name="485" /><span class="Maybe">     485:</span> <span class="k"> *</span>
<a name="486" /><span class="Maybe">     486:</span> <span class="k"> * RPM_REQ_AUTOSUSPEND    Same as RPM_REQ_SUSPEND, but not until the device has</span>
<a name="487" /><span class="Maybe">     487:</span> <span class="k"> *            been inactive for as long as power.autosuspend_delay</span>
<a name="488" /><span class="Maybe">     488:</span> <span class="k"> *</span>
<a name="489" /><span class="Maybe">     489:</span> <span class="k"> * RPM_REQ_RESUME    Run the device bus type&apos;s -&gt;runtime_resume() callback</span>
<a name="490" /><span class="Maybe">     490:</span> <span class="k"> */</span>
<a name="491" /><span class="Maybe">     491:</span> 
<a name="492" /><span class="Maybe">     492:</span> <span class="m">enum</span> <span class="b">rpm_request</span> <span class="f">{</span>
<a name="493" /><span class="Maybe">     493:</span>     <span class="b">RPM_REQ_NONE</span> <span class="f">=</span> <span class="c">0</span><span class="f">,</span>
<a name="494" /><span class="Maybe">     494:</span>     <span class="b">RPM_REQ_IDLE</span><span class="f">,</span>
<a name="495" /><span class="Maybe">     495:</span>     <span class="b">RPM_REQ_SUSPEND</span><span class="f">,</span>
<a name="496" /><span class="Maybe">     496:</span>     <span class="b">RPM_REQ_AUTOSUSPEND</span><span class="f">,</span>
<a name="497" /><span class="Maybe">     497:</span>     <span class="b">RPM_REQ_RESUME</span><span class="f">,</span>
<a name="498" /><span class="Maybe">     498:</span> <span class="f">}</span><span class="f">;</span>
<a name="499" /><span class="Maybe">     499:</span> 
<a name="500" /><span class="Maybe">     500:</span> <span class="m">struct</span> <span class="b">wakeup_source</span><span class="f">;</span>
<a name="501" /><span class="Maybe">     501:</span> 
<a name="502" /><span class="Maybe">     502:</span> <span class="m">struct</span> <span class="b">pm_domain_data</span> <span class="f">{</span>
<a name="503" /><span class="Maybe">     503:</span>     <span class="m">struct</span> <span class="b">list_head</span> <span class="b">list_node</span><span class="f">;</span>
<a name="504" /><span class="Maybe">     504:</span>     <span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">;</span>
<a name="505" /><span class="Maybe">     505:</span> <span class="f">}</span><span class="f">;</span>
<a name="506" /><span class="Maybe">     506:</span> 
<a name="507" /><span class="Maybe">     507:</span> <span class="m">struct</span> <span class="b">pm_subsys_data</span> <span class="f">{</span>
<a name="508" /><span class="Maybe">     508:</span>     <span class="b">spinlock_t</span> <span class="b">lock</span><span class="f">;</span>
<a name="509" /><span class="Maybe">     509:</span>     <span class="m">unsigned</span> <span class="m">int</span> <span class="b">refcount</span><span class="f">;</span>
<a name="510" /><span class="False">     510:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_PM_CLK</span>
<a name="511" /><span class="False">     511:</span>     <span class="m">struct</span> <span class="b">list_head</span> <span class="b">clock_list</span><span class="f">;</span>
<a name="512" /><span class="Maybe">     512:</span> <span class="f">#</span><span class="n">endif</span>
<a name="513" /><span class="False">     513:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_PM_GENERIC_DOMAINS</span>
<a name="514" /><span class="False">     514:</span>     <span class="m">struct</span> <span class="b">pm_domain_data</span> <span class="f">*</span><span class="b">domain_data</span><span class="f">;</span>
<a name="515" /><span class="Maybe">     515:</span> <span class="f">#</span><span class="n">endif</span>
<a name="516" /><span class="Maybe">     516:</span> <span class="f">}</span><span class="f">;</span>
<a name="517" /><span class="Maybe">     517:</span> 
<a name="518" /><span class="Maybe">     518:</span> <span class="m">struct</span> <span class="b">dev_pm_info</span> <span class="f">{</span>
<a name="519" /><span class="Maybe">     519:</span>     <span class="b">pm_message_t</span>        <span class="b">power_state</span><span class="f">;</span>
<a name="520" /><span class="Maybe">     520:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">can_wakeup</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="521" /><span class="Maybe">     521:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">async_suspend</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="522" /><span class="Maybe">     522:</span>     <span class="m">bool</span>            <span class="b">is_prepared</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>    <span class="k">/* Owned by the PM core */</span>
<a name="523" /><span class="Maybe">     523:</span>     <span class="m">bool</span>            <span class="b">is_suspended</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>    <span class="k">/* Ditto */</span>
<a name="524" /><span class="Maybe">     524:</span>     <span class="m">bool</span>            <span class="b">ignore_children</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="525" /><span class="Maybe">     525:</span>     <span class="m">bool</span>            <span class="b">early_init</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>    <span class="k">/* Owned by the PM core */</span>
<a name="526" /><span class="Maybe">     526:</span>     <span class="b">spinlock_t</span>        <span class="b">lock</span><span class="f">;</span>
<a name="527" /><span class="Maybe">     527:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1BNX1NMRUVQXzA_"><span class="b">CONFIG_PM_SLEEP</span></a>
<a name="528" /><span class="Maybe">     528:</span>     <span class="m">struct</span> <span class="b">list_head</span>    <span class="b">entry</span><span class="f">;</span>
<a name="529" /><span class="Maybe">     529:</span>     <span class="m">struct</span> <span class="b">completion</span>    <span class="b">completion</span><span class="f">;</span>
<a name="530" /><span class="Maybe">     530:</span>     <span class="m">struct</span> <span class="b">wakeup_source</span>    <span class="f">*</span><span class="b">wakeup</span><span class="f">;</span>
<a name="531" /><span class="Maybe">     531:</span>     <span class="m">bool</span>            <span class="b">wakeup_path</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="532" /><span class="Maybe">     532:</span>     <span class="m">bool</span>            <span class="b">syscore</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="533" /><span class="False">     533:</span> <span class="f">#</span><span class="n">else</span>
<a name="534" /><span class="False">     534:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">should_wakeup</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="535" /><span class="Maybe">     535:</span> <span class="f">#</span><span class="n">endif</span>
<a name="536" /><span class="Maybe">     536:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1BNX1JVTlRJTUVfMA__"><span class="b">CONFIG_PM_RUNTIME</span></a>
<a name="537" /><span class="Maybe">     537:</span>     <span class="m">struct</span> <span class="b">timer_list</span>    <span class="b">suspend_timer</span><span class="f">;</span>
<a name="538" /><span class="Maybe">     538:</span>     <span class="m">unsigned</span> <span class="m">long</span>        <span class="b">timer_expires</span><span class="f">;</span>
<a name="539" /><span class="Maybe">     539:</span>     <span class="m">struct</span> <span class="b">work_struct</span>    <span class="b">work</span><span class="f">;</span>
<a name="540" /><span class="Maybe">     540:</span>     <span class="b">wait_queue_head_t</span>    <span class="b">wait_queue</span><span class="f">;</span>
<a name="541" /><span class="Maybe">     541:</span>     <span class="b">atomic_t</span>        <span class="b">usage_count</span><span class="f">;</span>
<a name="542" /><span class="Maybe">     542:</span>     <span class="b">atomic_t</span>        <span class="b">child_count</span><span class="f">;</span>
<a name="543" /><span class="Maybe">     543:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">disable_depth</span><span class="f">:</span><span class="c">3</span><span class="f">;</span>
<a name="544" /><span class="Maybe">     544:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">idle_notification</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="545" /><span class="Maybe">     545:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">request_pending</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="546" /><span class="Maybe">     546:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">deferred_resume</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="547" /><span class="Maybe">     547:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">run_wake</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="548" /><span class="Maybe">     548:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">runtime_auto</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="549" /><span class="Maybe">     549:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">no_callbacks</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="550" /><span class="Maybe">     550:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">irq_safe</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="551" /><span class="Maybe">     551:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">use_autosuspend</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="552" /><span class="Maybe">     552:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">timer_autosuspends</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="553" /><span class="Maybe">     553:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">memalloc_noio</span><span class="f">:</span><span class="c">1</span><span class="f">;</span>
<a name="554" /><span class="Maybe">     554:</span>     <span class="m">enum</span> <span class="b">rpm_request</span>    <span class="b">request</span><span class="f">;</span>
<a name="555" /><span class="Maybe">     555:</span>     <span class="m">enum</span> <span class="b">rpm_status</span>        <span class="b">runtime_status</span><span class="f">;</span>
<a name="556" /><span class="Maybe">     556:</span>     <span class="m">int</span>            <span class="b">runtime_error</span><span class="f">;</span>
<a name="557" /><span class="Maybe">     557:</span>     <span class="m">int</span>            <span class="b">autosuspend_delay</span><span class="f">;</span>
<a name="558" /><span class="Maybe">     558:</span>     <span class="m">unsigned</span> <span class="m">long</span>        <span class="b">last_busy</span><span class="f">;</span>
<a name="559" /><span class="Maybe">     559:</span>     <span class="m">unsigned</span> <span class="m">long</span>        <span class="b">active_jiffies</span><span class="f">;</span>
<a name="560" /><span class="Maybe">     560:</span>     <span class="m">unsigned</span> <span class="m">long</span>        <span class="b">suspended_jiffies</span><span class="f">;</span>
<a name="561" /><span class="Maybe">     561:</span>     <span class="m">unsigned</span> <span class="m">long</span>        <span class="b">accounting_timestamp</span><span class="f">;</span>
<a name="562" /><span class="Maybe">     562:</span> <span class="f">#</span><span class="n">endif</span>
<a name="563" /><span class="Maybe">     563:</span>     <span class="m">struct</span> <span class="b">pm_subsys_data</span>    <span class="f">*</span><span class="b">subsys_data</span><span class="f">;</span>  <span class="k">/* Owned by the subsystem. */</span>
<a name="564" /><span class="Maybe">     564:</span>     <span class="m">struct</span> <span class="b">dev_pm_qos</span>    <span class="f">*</span><span class="b">qos</span><span class="f">;</span>
<a name="565" /><span class="Maybe">     565:</span> <span class="f">}</span><span class="f">;</span>
<a name="566" /><span class="Maybe">     566:</span> 
<a name="567" /><span class="Maybe">     567:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">update_pm_runtime_accounting</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="568" /><span class="Maybe">     568:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">dev_pm_get_subsys_data</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="569" /><span class="Maybe">     569:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">dev_pm_put_subsys_data</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="570" /><span class="Maybe">     570:</span> 
<a name="571" /><span class="Maybe">     571:</span> <span class="k">/*</span>
<a name="572" /><span class="Maybe">     572:</span> <span class="k"> * Power domains provide callbacks that are executed during system suspend,</span>
<a name="573" /><span class="Maybe">     573:</span> <span class="k"> * hibernation, system resume and during runtime PM transitions along with</span>
<a name="574" /><span class="Maybe">     574:</span> <span class="k"> * subsystem-level and driver-level callbacks.</span>
<a name="575" /><span class="Maybe">     575:</span> <span class="k"> */</span>
<a name="576" /><span class="Maybe">     576:</span> <span class="m">struct</span> <span class="b">dev_pm_domain</span> <span class="f">{</span>
<a name="577" /><span class="Maybe">     577:</span>     <span class="m">struct</span> <span class="b">dev_pm_ops</span>    <span class="b">ops</span><span class="f">;</span>
<a name="578" /><span class="Maybe">     578:</span> <span class="f">}</span><span class="f">;</span>
<a name="579" /><span class="Maybe">     579:</span> 
<a name="580" /><span class="Maybe">     580:</span> <span class="k">/*</span>
<a name="581" /><span class="Maybe">     581:</span> <span class="k"> * The PM_EVENT_ messages are also used by drivers implementing the legacy</span>
<a name="582" /><span class="Maybe">     582:</span> <span class="k"> * suspend framework, based on the -&gt;suspend() and -&gt;resume() callbacks common</span>
<a name="583" /><span class="Maybe">     583:</span> <span class="k"> * for suspend and hibernation transitions, according to the rules below.</span>
<a name="584" /><span class="Maybe">     584:</span> <span class="k"> */</span>
<a name="585" /><span class="Maybe">     585:</span> 
<a name="586" /><span class="Maybe">     586:</span> <span class="k">/* Necessary, because several drivers use PM_EVENT_PRETHAW */</span>
<a name="587" /><span class="Maybe">     587:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUFJFVEhBV18w"><span class="b">PM_EVENT_PRETHAW</span></a> <a href="cpu.c_macros_noref.html#_UE1fRVZFTlRfUVVJRVNDRV8w"><span class="b">PM_EVENT_QUIESCE</span></a>
<a name="588" /><span class="Maybe">     588:</span> 
<a name="589" /><span class="Maybe">     589:</span> <span class="k">/*</span>
<a name="590" /><span class="Maybe">     590:</span> <span class="k"> * One transition is triggered by resume(), after a suspend() call; the</span>
<a name="591" /><span class="Maybe">     591:</span> <span class="k"> * message is implicit:</span>
<a name="592" /><span class="Maybe">     592:</span> <span class="k"> *</span>
<a name="593" /><span class="Maybe">     593:</span> <span class="k"> * ON        Driver starts working again, responding to hardware events</span>
<a name="594" /><span class="Maybe">     594:</span> <span class="k"> *         and software requests.  The hardware may have gone through</span>
<a name="595" /><span class="Maybe">     595:</span> <span class="k"> *         a power-off reset, or it may have maintained state from the</span>
<a name="596" /><span class="Maybe">     596:</span> <span class="k"> *         previous suspend() which the driver will rely on while</span>
<a name="597" /><span class="Maybe">     597:</span> <span class="k"> *         resuming.  On most platforms, there are no restrictions on</span>
<a name="598" /><span class="Maybe">     598:</span> <span class="k"> *         availability of resources like clocks during resume().</span>
<a name="599" /><span class="Maybe">     599:</span> <span class="k"> *</span>
<a name="600" /><span class="Maybe">     600:</span> <span class="k"> * Other transitions are triggered by messages sent using suspend().  All</span>
<a name="601" /><span class="Maybe">     601:</span> <span class="k"> * these transitions quiesce the driver, so that I/O queues are inactive.</span>
<a name="602" /><span class="Maybe">     602:</span> <span class="k"> * That commonly entails turning off IRQs and DMA; there may be rules</span>
<a name="603" /><span class="Maybe">     603:</span> <span class="k"> * about how to quiesce that are specific to the bus or the device&apos;s type.</span>
<a name="604" /><span class="Maybe">     604:</span> <span class="k"> * (For example, network drivers mark the link state.)  Other details may</span>
<a name="605" /><span class="Maybe">     605:</span> <span class="k"> * differ according to the message:</span>
<a name="606" /><span class="Maybe">     606:</span> <span class="k"> *</span>
<a name="607" /><span class="Maybe">     607:</span> <span class="k"> * SUSPEND    Quiesce, enter a low power device state appropriate for</span>
<a name="608" /><span class="Maybe">     608:</span> <span class="k"> *         the upcoming system state (such as PCI_D3hot), and enable</span>
<a name="609" /><span class="Maybe">     609:</span> <span class="k"> *         wakeup events as appropriate.</span>
<a name="610" /><span class="Maybe">     610:</span> <span class="k"> *</span>
<a name="611" /><span class="Maybe">     611:</span> <span class="k"> * HIBERNATE    Enter a low power device state appropriate for the hibernation</span>
<a name="612" /><span class="Maybe">     612:</span> <span class="k"> *         state (eg. ACPI S4) and enable wakeup events as appropriate.</span>
<a name="613" /><span class="Maybe">     613:</span> <span class="k"> *</span>
<a name="614" /><span class="Maybe">     614:</span> <span class="k"> * FREEZE    Quiesce operations so that a consistent image can be saved;</span>
<a name="615" /><span class="Maybe">     615:</span> <span class="k"> *         but do NOT otherwise enter a low power device state, and do</span>
<a name="616" /><span class="Maybe">     616:</span> <span class="k"> *         NOT emit system wakeup events.</span>
<a name="617" /><span class="Maybe">     617:</span> <span class="k"> *</span>
<a name="618" /><span class="Maybe">     618:</span> <span class="k"> * PRETHAW    Quiesce as if for FREEZE; additionally, prepare for restoring</span>
<a name="619" /><span class="Maybe">     619:</span> <span class="k"> *         the system from a snapshot taken after an earlier FREEZE.</span>
<a name="620" /><span class="Maybe">     620:</span> <span class="k"> *         Some drivers will need to reset their hardware state instead</span>
<a name="621" /><span class="Maybe">     621:</span> <span class="k"> *         of preserving it, to ensure that it&apos;s never mistaken for the</span>
<a name="622" /><span class="Maybe">     622:</span> <span class="k"> *         state which that earlier snapshot had set up.</span>
<a name="623" /><span class="Maybe">     623:</span> <span class="k"> *</span>
<a name="624" /><span class="Maybe">     624:</span> <span class="k"> * A minimally power-aware driver treats all messages as SUSPEND, fully</span>
<a name="625" /><span class="Maybe">     625:</span> <span class="k"> * reinitializes its device during resume() -- whether or not it was reset</span>
<a name="626" /><span class="Maybe">     626:</span> <span class="k"> * during the suspend/resume cycle -- and can&apos;t issue wakeup events.</span>
<a name="627" /><span class="Maybe">     627:</span> <span class="k"> *</span>
<a name="628" /><span class="Maybe">     628:</span> <span class="k"> * More power-aware drivers may also use low power states at runtime as</span>
<a name="629" /><span class="Maybe">     629:</span> <span class="k"> * well as during system sleep states like PM_SUSPEND_STANDBY.  They may</span>
<a name="630" /><span class="Maybe">     630:</span> <span class="k"> * be able to use wakeup events to exit from runtime low-power states,</span>
<a name="631" /><span class="Maybe">     631:</span> <span class="k"> * or from system low-power states such as standby or suspend-to-RAM.</span>
<a name="632" /><span class="Maybe">     632:</span> <span class="k"> */</span>
<a name="633" /><span class="Maybe">     633:</span> 
<a name="634" /><span class="Maybe">     634:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1BNX1NMRUVQXzA_"><span class="b">CONFIG_PM_SLEEP</span></a>
<a name="635" /><span class="Maybe">     635:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">device_pm_lock</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="636" /><span class="Maybe">     636:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">dpm_resume_start</span><span class="f">(</span><span class="b">pm_message_t</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="637" /><span class="Maybe">     637:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">dpm_resume_end</span><span class="f">(</span><span class="b">pm_message_t</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="638" /><span class="Maybe">     638:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">dpm_resume</span><span class="f">(</span><span class="b">pm_message_t</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="639" /><span class="Maybe">     639:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">dpm_complete</span><span class="f">(</span><span class="b">pm_message_t</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="640" /><span class="Maybe">     640:</span> 
<a name="641" /><span class="Maybe">     641:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">device_pm_unlock</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="642" /><span class="Maybe">     642:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">dpm_suspend_end</span><span class="f">(</span><span class="b">pm_message_t</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="643" /><span class="Maybe">     643:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">dpm_suspend_start</span><span class="f">(</span><span class="b">pm_message_t</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="644" /><span class="Maybe">     644:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">dpm_suspend</span><span class="f">(</span><span class="b">pm_message_t</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="645" /><span class="Maybe">     645:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">dpm_prepare</span><span class="f">(</span><span class="b">pm_message_t</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="646" /><span class="Maybe">     646:</span> 
<a name="647" /><span class="Maybe">     647:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__suspend_report_result</span><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">function</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">fn</span><span class="f">,</span> <span class="m">int</span> <span class="b">ret</span><span class="f">)</span><span class="f">;</span>
<a name="648" /><span class="Maybe">     648:</span> 
<a name="649" /><span class="Maybe">     649:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c3VzcGVuZF9yZXBvcnRfcmVzdWx0XzA_"><span class="b">suspend_report_result</span></a><span class="f">(</span><span class="b">fn</span><span class="f">,</span> <span class="b">ret</span><span class="f">)</span>                    \
<a name="650" /><span class="Maybe">     650:</span>     <span class="m">do</span> <span class="f">{</span>                                \
<a name="651" /><span class="Maybe">     651:</span>         <span class="b">__suspend_report_result</span><span class="f">(</span><span class="b">__func__</span><span class="f">,</span> <span class="b">fn</span><span class="f">,</span> <span class="b">ret</span><span class="f">)</span><span class="f">;</span>        \
<a name="652" /><span class="Maybe">     652:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="653" /><span class="Maybe">     653:</span> 
<a name="654" /><span class="Maybe">     654:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">device_pm_wait_for_dev</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">sub</span><span class="f">,</span> <span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="655" /><span class="Maybe">     655:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">dpm_for_each_dev</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="b">data</span><span class="f">,</span> <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">fn</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="656" /><span class="Maybe">     656:</span> 
<a name="657" /><span class="Maybe">     657:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_prepare</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="658" /><span class="Maybe">     658:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_suspend_late</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="659" /><span class="Maybe">     659:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_suspend_noirq</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="660" /><span class="Maybe">     660:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_suspend</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="661" /><span class="Maybe">     661:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_resume_early</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="662" /><span class="Maybe">     662:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_resume_noirq</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="663" /><span class="Maybe">     663:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_resume</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="664" /><span class="Maybe">     664:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_freeze_noirq</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="665" /><span class="Maybe">     665:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_freeze_late</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="666" /><span class="Maybe">     666:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_freeze</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="667" /><span class="Maybe">     667:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_thaw_noirq</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="668" /><span class="Maybe">     668:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_thaw_early</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="669" /><span class="Maybe">     669:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_thaw</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="670" /><span class="Maybe">     670:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_restore_noirq</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="671" /><span class="Maybe">     671:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_restore_early</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="672" /><span class="Maybe">     672:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_restore</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="673" /><span class="Maybe">     673:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_poweroff_noirq</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="674" /><span class="Maybe">     674:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_poweroff_late</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="675" /><span class="Maybe">     675:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pm_generic_poweroff</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="676" /><span class="Maybe">     676:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">pm_generic_complete</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">dev</span><span class="f">)</span><span class="f">;</span>
<a name="677" /><span class="Maybe">     677:</span> 
<a name="678" /><span class="False">     678:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* !CONFIG_PM_SLEEP */</span>
<a name="679" /><span class="False">     679:</span> 
<a name="680" /><span class="False">     680:</span> <span class="f">#</span><span class="n">define</span> <span class="b">device_pm_lock</span><span class="f">(</span><span class="f">)</span> <span class="m">do</span> <span class="f">{</span><span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="681" /><span class="False">     681:</span> <span class="f">#</span><span class="n">define</span> <span class="b">device_pm_unlock</span><span class="f">(</span><span class="f">)</span> <span class="m">do</span> <span class="f">{</span><span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="682" /><span class="False">     682:</span> 
<a name="683" /><span class="False">     683:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">dpm_suspend_start</span><span class="f">(</span><span class="b">pm_message_t</span> <span class="b">state</span><span class="f">)</span>
<a name="684" /><span class="False">     684:</span> <span class="f">{</span>
<a name="685" /><span class="False">     685:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="686" /><span class="False">     686:</span> <span class="f">}</span>
<a name="687" /><span class="False">     687:</span> 
<a name="688" /><span class="False">     688:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c3VzcGVuZF9yZXBvcnRfcmVzdWx0XzA_"><span class="b">suspend_report_result</span></a><span class="f">(</span><span class="b">fn</span><span class="f">,</span> <span class="b">ret</span><span class="f">)</span>        <span class="m">do</span> <span class="f">{</span><span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="689" /><span class="False">     689:</span> 
<a name="690" /><span class="False">     690:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">device_pm_wait_for_dev</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">a</span><span class="f">,</span> <span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="b">b</span><span class="f">)</span>
<a name="691" /><span class="False">     691:</span> <span class="f">{</span>
<a name="692" /><span class="False">     692:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="693" /><span class="False">     693:</span> <span class="f">}</span>
<a name="694" /><span class="False">     694:</span> 
<a name="695" /><span class="False">     695:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">dpm_for_each_dev</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="b">data</span><span class="f">,</span> <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">fn</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">device</span> <span class="f">*</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">)</span>
<a name="696" /><span class="False">     696:</span> <span class="f">{</span>
<a name="697" /><span class="False">     697:</span> <span class="f">}</span>
<a name="698" /><span class="False">     698:</span> 
<a name="699" /><span class="False">     699:</span> <span class="f">#</span><span class="n">define</span> <span class="b">pm_generic_prepare</span>    <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="700" /><span class="False">     700:</span> <span class="f">#</span><span class="n">define</span> <span class="b">pm_generic_suspend</span>    <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="701" /><span class="False">     701:</span> <span class="f">#</span><span class="n">define</span> <span class="b">pm_generic_resume</span>    <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="702" /><span class="False">     702:</span> <span class="f">#</span><span class="n">define</span> <span class="b">pm_generic_freeze</span>    <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="703" /><span class="False">     703:</span> <span class="f">#</span><span class="n">define</span> <span class="b">pm_generic_thaw</span>        <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="704" /><span class="False">     704:</span> <span class="f">#</span><span class="n">define</span> <span class="b">pm_generic_restore</span>    <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="705" /><span class="False">     705:</span> <span class="f">#</span><span class="n">define</span> <span class="b">pm_generic_poweroff</span>    <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="706" /><span class="False">     706:</span> <span class="f">#</span><span class="n">define</span> <span class="b">pm_generic_complete</span>    <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="707" /><span class="Maybe">     707:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !CONFIG_PM_SLEEP */</span>
<a name="708" /><span class="Maybe">     708:</span> 
<a name="709" /><span class="Maybe">     709:</span> <span class="k">/* How to reorder dpm_list after device_move() */</span>
<a name="710" /><span class="Maybe">     710:</span> <span class="m">enum</span> <span class="b">dpm_order</span> <span class="f">{</span>
<a name="711" /><span class="Maybe">     711:</span>     <span class="b">DPM_ORDER_NONE</span><span class="f">,</span>
<a name="712" /><span class="Maybe">     712:</span>     <span class="b">DPM_ORDER_DEV_AFTER_PARENT</span><span class="f">,</span>
<a name="713" /><span class="Maybe">     713:</span>     <span class="b">DPM_ORDER_PARENT_BEFORE_DEV</span><span class="f">,</span>
<a name="714" /><span class="Maybe">     714:</span>     <span class="b">DPM_ORDER_DEV_LAST</span><span class="f">,</span>
<a name="715" /><span class="Maybe">     715:</span> <span class="f">}</span><span class="f">;</span>
<a name="716" /><span class="Maybe">     716:</span> 
<a name="717" /><span class="True">     717:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_PM_H */</span>
<a name="718" /><span class="True">     718:</span> </pre>
  </body>
</html>
